# Obtained from LibIGL

if (METIS_INCLUDES AND METIS_LIBRARIES)
    set(METIS_FIND_QUIETLY TRUE)
endif (METIS_INCLUDES AND METIS_LIBRARIES)

find_path(METIS_INCLUDES
        NAMES
        metis.h
        PATHS
        $ENV{METISROOT}
        ${INCLUDE_INSTALL_DIR}
        PATH_SUFFIXES
        .
        metis
        include
        )

macro(_metis_check_version)
    file(READ "${METIS_INCLUDES}/metis.h" _metis_version_header)

    string(REGEX MATCH "define[ \t]+METIS_VER_MAJOR[ \t]+([0-9]+)" _metis_major_version_match "${_metis_version_header}")
    set(METIS_MAJOR_VERSION "${CMAKE_MATCH_1}")
    string(REGEX MATCH "define[ \t]+METIS_VER_MINOR[ \t]+([0-9]+)" _metis_minor_version_match "${_metis_version_header}")
    set(METIS_MINOR_VERSION "${CMAKE_MATCH_1}")
    string(REGEX MATCH "define[ \t]+METIS_VER_SUBMINOR[ \t]+([0-9]+)" _metis_subminor_version_match "${_metis_version_header}")
    set(METIS_SUBMINOR_VERSION "${CMAKE_MATCH_1}")
    if(NOT METIS_MAJOR_VERSION)
        message(STATUS "Could not determine Metis version. Assuming version 4.0.0")
        set(METIS_VERSION 4.0.0)
    else()
        set(METIS_VERSION ${METIS_MAJOR_VERSION}.${METIS_MINOR_VERSION}.${METIS_SUBMINOR_VERSION})
    endif()
    if(${METIS_VERSION} VERSION_LESS ${Metis_FIND_VERSION})
        set(METIS_VERSION_OK FALSE)
    else()
        set(METIS_VERSION_OK TRUE)
    endif()

    if(NOT METIS_VERSION_OK)
        message(STATUS "Metis version ${METIS_VERSION} found in ${METIS_INCLUDES}, "
                "but at least version ${Metis_FIND_VERSION} is required")
    endif(NOT METIS_VERSION_OK)
endmacro(_metis_check_version)

if(METIS_INCLUDES AND Metis_FIND_VERSION)
    _metis_check_version()
else()
    set(METIS_VERSION_OK TRUE)
endif()


find_library(METIS_LIBRARIES metis PATHS $ENV{METISROOT} ${LIB_INSTALL_DIR} PATH_SUFFIXES lib)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(METIS DEFAULT_MSG
        METIS_INCLUDES METIS_LIBRARIES METIS_VERSION_OK)

mark_as_advanced(METIS_INCLUDES METIS_LIBRARIES)